/*
 * Copyright (c) 2022  by Junzhao
 * THIS FILE IS PART OF JAVA-Data-Structures-and-Algorithms PROJECT
 * All Rights Reserved.
 */

package 初识递归;

/**
 * @Description 简单的说: 递归就是方法自己调用自己,每次调用时传入不同的变量.
 * 递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。
 * <p>
 * 递归用于解决什么样的问题
 * <p>
 * 各种数学问题如: 8皇后问题 , 汉诺塔, 阶乘问题, 迷宫问题, 球和篮子的问题(google编程大赛)
 * 各种算法中也会使用到递归，比如快排，归并排序，二分查找，分治算法等.
 * 将用栈解决的问题-->递归代码比较简洁
 * <p>
 * 递归调用规则：
 * 1. 当程序执行到一个方法时，就会开辟一个独立的空间(栈)
 * 2. 每个空间的数据(局部变量)，是独立的.
 * @Author 俊昭
 * @Date 2022/4/29
 */
public class Backtracking {
    public static void main(String[] args) {
//        t1(10);
        System.out.println(t2(3));

    }

    public static void t1(int n) {
        //打印问题
        if (n > 2) {
            t1(n - 1);
        }
        System.out.println("n=" + n);

    }

    public static int t2(int n) {
        //阶乘
        if (n == 1) {
            return 1;
        } else {
            return t2(n - 1) * n;
        }

    }
}
